package com.tmsps.ne4weixin.bean.menu;

import java.util.ArrayList;
import java.util.List;

import com.tmsps.ne4weixin.config.enumeration.MenuTypeEnum;

import lombok.Data;

@Data
public class MenuButton {
	
	/**
	 * 必填 是 菜单的响应动作类型，
	 * view表示网页类型，click表示点击类型，miniprogram表示小程序类型
	 */
	private String type;
	
	/**
	 * 必填 是 菜单标题，不超过16个字节，子菜单不超过60个字节
	 */
	private String name;
	
	/**
	 * 必填 是(click等点击类型必须) 菜单KEY值，用于消息接口推送，不超过128字节
	 */
	private String key;
	
	/**
	 * 必填 是(view、miniprogram类型必须) 网页 链接，用户点击菜单可打开链接，不超过1024字节。 
	 * type为miniprogram时，不支持小程序的老版本客户端将打开本url。
	 */
	private String url;
	
	/**
	 * 必填 是(media_id类型和view_limited类型必须)永久素材接口返回的合法media_id
	 */
	private String media_id;
	
	/**
	 * 必填 是	(miniprogram类型必须)小程序的appid（仅认证公众号可配置）
	 */
	private String appid;
	
	/**
	 * 必填 是	(miniprogram类型必须)小程序的页面路径
	 */
	private String pagepath;
	
	/**
	 *  子菜单
	 */
	private List<MenuButton> sub_button = new ArrayList<MenuButton>();

	public MenuButton() {}
	
	public MenuButton(String name) {
		this.name = name;
	}
	
	public MenuButton(String name, MenuTypeEnum type) {
		this.name = name;
		this.type = type.toName();
	}
	
	public MenuButton(String name, MenuTypeEnum type, String key) {
		this.name = name;
		this.type = type.toName();
		this.key = key;
	}
	
	public MenuButton(String name, List<MenuButton> sub_button) {
		this.name = name;
		this.sub_button = sub_button;
	}

	public MenuButton(MenuTypeEnum type, String name, String url, List<MenuButton> sub_button) {
		this.type = type.toName();
		this.name = name;
		this.url = url;
		this.sub_button = sub_button;
	}
	
	/**
	 * @param type 类型为click与view构造有些不同
	 * @param name
	 * @param url/key
	 */
	public MenuButton(MenuTypeEnum type, String name, String code) {
		super();
		this.type = type.toName();
		this.name = name;
		if (type.equals(MenuTypeEnum.VIEW)) {
			this.url = code;
		}else {
			this.key = code;
		}
	}
	
	/**
	 * @param type :miniprogram 菜单为小程序时候的构造器,再创建小程序菜单时，需要将小程序关联成功才可以
	 * @param name
	 * @param url
	 * @param appid
	 * @param pagepath
	 */
	public MenuButton(MenuTypeEnum type,String name, String url, String appid,String pagepath) {
		super();
		this.type = type.toName();//仅为小程序
		this.name = name;
		this.url = url;
		this.appid = appid;
		this.pagepath = pagepath;
	}

	public void setSub_button(List<MenuButton> sub_button) {
		if (null == sub_button || sub_button.size() > 5) {
			throw new IllegalArgumentException("子菜单最多只有5个");
		}
		this.sub_button = sub_button;
	}

	public void addMenuButton(MenuButton mb) {
		this.sub_button.add(mb);
		if (sub_button.size() > 5) {
			throw new IllegalArgumentException("子菜单最多只有5个");
		}
	}

}
